<?php

/**
 * MVM_MALL 网上商店系统 分类树处理类
 * ============================================================================
 * 版权所有 (C) 2007-2010 www.mvmmall.com，并保留所有权利。
 * 网站地址: http://www.mvmmall.com
 * ----------------------------------------------------------------------------
 * 这是一个免费开源的软件；这意味着您可以在不用于商业目的的前提下对程序代码
 * 进行修改、使用和再发布。
 * ============================================================================
 * $Author:  www.mvmmall.com  $
 * $Date: 2008-07-18 $
 * $Id: category_tree.class.php  www.mvmmall.com$
 * ---------------------------------------------
*/

class tree
{
     //存储分类数据的数组
	var  $arr_tree = array(); 
	function new_node($id,$name,$parent,$show,$order){
		$layer = $parent ? $this->arr_tree[$parent][2] + 1 : 0;
		$this->arr_tree[$id] = array($name,$parent,$layer,$show,$order);
	}
//获取子节点，如果没有子节点，则返回一个空的数组,属于函数递归的
  function get_childs($id=0){
		$childs = array();
		foreach ($this->arr_tree as $key => $value)
		{
			if ($id == $value[1]) {
				$childs[$key] = $value;
				$childs = $childs + $this->get_childs($key);
			}
		}
		return $childs;
	}
	
	//获取子节点的id，子节点的id依次存储在一个一维数组中，如果没有子节点，则返回false
	function get_id($id)
	{
		$childs   = $this->get_childs($id);
		if (!$childs) return false;
		$childsid = array();
		for (reset($childs);$key=key($childs);next($childs)){
			$childsid[] = $key;
		}
		return $childsid;
	}
	
	//获取节点信息，返回一个一维数组，共三个值，分别为节点名称，节点的父节点id，节点的层次，如果该节点不存在，返回false
	function get_node($id)
	{
		return isset($this->arr_tree[$id]) ? $this->arr_tree[$id] : false;
	}
	//获取父节点的信息，返回的是一个一维数组，其值分别为：父节点的id，父节点的名称，父节点的父节点，父节点所在的层次，如果该节点不存在或为根节点，返回false
	 function get_parent($id)
	{
		if (!isset($this->arr_tree[$id])) return false;
		if (isset($this->arr_tree[$this->arr_tree[$id][1]])) $parent = $this->arr_tree[$this->arr_tree[$id][1]]; else return false;
		return array_merge(array($this->arr_tree[$id][1]),$parent);
	}
	
	//获取根节点
 function get_root()
	{
		$rootnodes = array();
		foreach ($this->arr_tree as $key => $value) {
			$value[1] || $rootnodes[$key] = $value;
		}
		return $rootnodes;
	}
	
	//获取一个节点的层次
  function get_layer($id)
	{
		return $this->arr_tree[$id][2];
	}
}